//  这个文件就是我们对axios进行二次封装的文件
// 因为axios本身的功能不能满足我们的需求

import axios from 'axios';
import Nprogress from 'nprogress';
import 'nprogress/nprogress.css';

// 1. 这个方法会返回一个新的axios实例,功能和原来一样
const service =  axios.create({
    baseURL:'/api',
    timeout:'20000'  //配置超时时间
})  

// 请求拦截器
service.interceptors.request.use(
    (config)=>{
        Nprogress.start()
        return config
    }
)

//  响应拦截器
service.interceptors.response.use(
    (response)=>{
        Nprogress.done()  //  关闭进度条
        return response.data  //  以后请求返回的响应不是真正的响应,而是响应里面的数据
    },
    (error)=>{
        Nprogress.done()
        // 可以统一处理错误
        alert('请求失败' + error.message || '未知错误')

        // 统一处理完失败之后,你可以继续让后面再次处理,也可以选择不处理

        return new Promise(()=>{})  // 中断promise链,代表这个错误不用处理了
        // return Promise.reject(new Error('请求失败'))  
         //  代表错误可以继续往后传递,后面axios返回的promise可以继续处理
    }
)

// 把封装好的axios实例暴露出去
export default service